home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / atm.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  8KB  |  244 lines

  1. /* atm.h - general ATM declarations */
  2.  
  3. /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
  4.  
  5.  
  6. /*
  7.  * WARNING: User-space programs should not #include <linux/atm.h> directly.
  8.  *          Instead, #include <atm.h>
  9.  */
  10.  
  11. #ifndef _LINUX_ATM_H
  12. #define _LINUX_ATM_H
  13.  
  14. /*
  15.  * BEGIN_xx and END_xx markers are used for automatic generation of
  16.  * documentation. Do not change them.
  17.  */
  18.  
  19. #ifdef __KERNEL__
  20. #include <linux/socket.h>
  21. #include <linux/types.h>
  22. #endif
  23. #include <linux/compiler.h>
  24. #include <linux/atmapi.h>
  25. #include <linux/atmsap.h>
  26. #include <linux/atmioc.h>
  27.  
  28.  
  29. /* general ATM constants */
  30. #define ATM_CELL_SIZE            53    /* ATM cell size incl. header */
  31. #define ATM_CELL_PAYLOAD        48    /* ATM payload size */
  32. #define ATM_AAL0_SDU            52    /* AAL0 SDU size */
  33. #define ATM_MAX_AAL34_PDU     65535    /* maximum AAL3/4 PDU payload */
  34. #define ATM_AAL5_TRAILER         8    /* AAL5 trailer size */
  35. #define ATM_MAX_AAL5_PDU     65535    /* maximum AAL5 PDU payload */
  36. #define ATM_MAX_CDV          9999    /* maximum (default) CDV */
  37. #define ATM_NOT_RSV_VCI            32    /* first non-reserved VCI value */
  38.  
  39. #define ATM_MAX_VPI           255    /* maximum VPI at the UNI */
  40. #define ATM_MAX_VPI_NNI          4096    /* maximum VPI at the NNI */
  41. #define ATM_MAX_VCI         65535    /* maximum VCI */
  42.  
  43.  
  44. /* "protcol" values for the socket system call */
  45. #define ATM_NO_AAL    0        /* AAL not specified */
  46. #define ATM_AAL0    13        /* "raw" ATM cells */
  47. #define ATM_AAL1    1        /* AAL1 (CBR) */
  48. #define ATM_AAL2    2        /* AAL2 (VBR) */
  49. #define ATM_AAL34    3        /* AAL3/4 (data) */
  50. #define ATM_AAL5    5        /* AAL5 (data) */
  51.  
  52. /*
  53.  * socket option name coding functions
  54.  *
  55.  * Note that __SO_ENCODE and __SO_LEVEL are somewhat a hack since the
  56.  * << 22 only reserves 9 bits for the level.  On some architectures
  57.  * SOL_SOCKET is 0xFFFF, so that's a bit of a problem
  58.  */
  59.  
  60. #define __SO_ENCODE(l,n,t)    ((((l) & 0x1FF) << 22) | ((n) << 16) | \
  61.                 sizeof(t))
  62. #define __SO_LEVEL_MATCH(c,m)    (((c) >> 22) == ((m) & 0x1FF))
  63. #define __SO_NUMBER(c)        (((c) >> 16) & 0x3f)
  64. #define __SO_SIZE(c)        ((c) & 0x3fff)
  65.  
  66. /*
  67.  * ATM layer
  68.  */
  69.  
  70. #define SO_SETCLP    __SO_ENCODE(SOL_ATM,0,int)
  71.                 /* set CLP bit value - TODO */
  72. #define SO_CIRANGE    __SO_ENCODE(SOL_ATM,1,struct atm_cirange)
  73.                 /* connection identifier range; socket must be
  74.                    bound or connected */
  75. #define SO_ATMQOS    __SO_ENCODE(SOL_ATM,2,struct atm_qos)
  76.                 /* Quality of Service setting */
  77. #define SO_ATMSAP    __SO_ENCODE(SOL_ATM,3,struct atm_sap)
  78.                 /* Service Access Point */
  79. #define SO_ATMPVC    __SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc)
  80.                 /* "PVC" address (also for SVCs); get only */
  81. #define SO_MULTIPOINT    __SO_ENCODE(SOL_ATM, 5, int)
  82.                 /* make this vc a p2mp */
  83.  
  84.  
  85. /*
  86.  * Note @@@: since the socket layers don't really distinguish the control and
  87.  * the data plane but generally seems to be data plane-centric, any layer is
  88.  * about equally wrong for the SAP. If you have a better idea about this,
  89.  * please speak up ...
  90.  */
  91.  
  92.  
  93. /* ATM cell header (for AAL0) */
  94.  
  95. /* BEGIN_CH */
  96. #define ATM_HDR_GFC_MASK    0xf0000000
  97. #define ATM_HDR_GFC_SHIFT    28
  98. #define ATM_HDR_VPI_MASK    0x0ff00000
  99. #define ATM_HDR_VPI_SHIFT    20
  100. #define ATM_HDR_VCI_MASK    0x000ffff0
  101. #define ATM_HDR_VCI_SHIFT    4
  102. #define ATM_HDR_PTI_MASK    0x0000000e
  103. #define ATM_HDR_PTI_SHIFT    1
  104. #define ATM_HDR_CLP        0x00000001
  105. /* END_CH */
  106.  
  107.  
  108. /* PTI codings */
  109.  
  110. /* BEGIN_PTI */
  111. #define ATM_PTI_US0    0  /* user data cell, congestion not exp, SDU-type 0 */
  112. #define ATM_PTI_US1    1  /* user data cell, congestion not exp, SDU-type 1 */
  113. #define ATM_PTI_UCES0    2  /* user data cell, cong. experienced, SDU-type 0 */
  114. #define ATM_PTI_UCES1    3  /* user data cell, cong. experienced, SDU-type 1 */
  115. #define ATM_PTI_SEGF5    4  /* segment OAM F5 flow related cell */
  116. #define ATM_PTI_E2EF5    5  /* end-to-end OAM F5 flow related cell */
  117. #define ATM_PTI_RSV_RM    6  /* reserved for traffic control/resource mgmt */
  118. #define ATM_PTI_RSV    7  /* reserved */
  119. /* END_PTI */
  120.  
  121.  
  122. /*
  123.  * The following items should stay in linux/atm.h, which should be linked to
  124.  * netatm/atm.h
  125.  */
  126.  
  127. /* Traffic description */
  128.  
  129. #define ATM_NONE    0        /* no traffic */
  130. #define ATM_UBR        1
  131. #define ATM_CBR        2
  132. #define ATM_VBR        3
  133. #define ATM_ABR        4
  134. #define ATM_ANYCLASS    5        /* compatible with everything */
  135.  
  136. #define ATM_MAX_PCR    -1        /* maximum available PCR */
  137.  
  138. struct atm_trafprm {
  139.     unsigned char    traffic_class;    /* traffic class (ATM_UBR, ...) */
  140.     int        max_pcr;    /* maximum PCR in cells per second */
  141.     int        pcr;        /* desired PCR in cells per second */
  142.     int        min_pcr;    /* minimum PCR in cells per second */
  143.     int        max_cdv;    /* maximum CDV in microseconds */
  144.     int        max_sdu;    /* maximum SDU in bytes */
  145.         /* extra params for ABR */
  146.         unsigned int     icr;             /* Initial Cell Rate (24-bit) */
  147.         unsigned int    tbe;        /* Transient Buffer Exposure (24-bit) */ 
  148.         unsigned int     frtt : 24;    /* Fixed Round Trip Time (24-bit) */
  149.         unsigned int     rif  : 4;       /* Rate Increment Factor (4-bit) */
  150.         unsigned int     rdf  : 4;       /* Rate Decrease Factor (4-bit) */
  151.         unsigned int nrm_pres  :1;      /* nrm present bit */
  152.         unsigned int trm_pres  :1;         /* rm present bit */
  153.         unsigned int adtf_pres :1;         /* adtf present bit */
  154.         unsigned int cdf_pres  :1;        /* cdf present bit*/
  155.         unsigned int nrm       :3;         /* Max # of Cells for each forward RM cell (3-bit) */
  156.         unsigned int trm       :3;        /* Time between forward RM cells (3-bit) */    
  157.     unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */
  158.     unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */
  159.         unsigned int spare     :9;      /* spare bits */ 
  160. };
  161.  
  162. struct atm_qos {
  163.     struct atm_trafprm txtp;    /* parameters in TX direction */
  164.     struct atm_trafprm rxtp __ATM_API_ALIGN;
  165.                     /* parameters in RX direction */
  166.     unsigned char aal __ATM_API_ALIGN;
  167. };
  168.  
  169. /* PVC addressing */
  170.  
  171. #define ATM_ITF_ANY    -1        /* "magic" PVC address values */
  172. #define ATM_VPI_ANY    -1
  173. #define ATM_VCI_ANY    -1
  174. #define ATM_VPI_UNSPEC    -2
  175. #define ATM_VCI_UNSPEC    -2
  176.  
  177.  
  178. struct sockaddr_atmpvc {
  179.     unsigned short     sap_family;    /* address family, AF_ATMPVC  */
  180.     struct {            /* PVC address */
  181.         short    itf;        /* ATM interface */
  182.         short    vpi;        /* VPI (only 8 bits at UNI) */
  183.         int    vci;        /* VCI (only 16 bits at UNI) */
  184.     } sap_addr __ATM_API_ALIGN;    /* PVC address */
  185. };
  186.  
  187. /* SVC addressing */
  188.  
  189. #define    ATM_ESA_LEN    20        /* ATM End System Address length */
  190. #define ATM_E164_LEN    12        /* maximum E.164 number length */
  191.  
  192. #define ATM_AFI_DCC    0x39        /* DCC ATM Format */
  193. #define ATM_AFI_ICD    0x47        /* ICD ATM Format */
  194. #define ATM_AFI_E164    0x45        /* E.164 ATM Format */
  195. #define ATM_AFI_LOCAL    0x49        /* Local ATM Format */ 
  196.  
  197. #define ATM_AFI_DCC_GROUP    0xBD    /* DCC ATM Group Format */
  198. #define ATM_AFI_ICD_GROUP    0xC5    /* ICD ATM Group Format */
  199. #define ATM_AFI_E164_GROUP    0xC3    /* E.164 ATM Group Format */
  200. #define ATM_AFI_LOCAL_GROUP    0xC7    /* Local ATM Group Format */
  201.  
  202. #define ATM_LIJ_NONE    0        /* no leaf-initiated join */
  203. #define ATM_LIJ        1        /* request joining */
  204. #define ATM_LIJ_RPJ    2        /* set to root-prompted join */
  205. #define ATM_LIJ_NJ    3        /* set to network join */
  206.  
  207.  
  208. struct sockaddr_atmsvc {
  209.     unsigned short     sas_family;    /* address family, AF_ATMSVC */
  210.     struct {                /* SVC address */
  211.         unsigned char    prv[ATM_ESA_LEN];/* private ATM address */
  212.         char        pub[ATM_E164_LEN+1]; /* public address (E.164) */
  213.                         /* unused addresses must be bzero'ed */
  214.     char        lij_type;    /* role in LIJ call; one of ATM_LIJ* */
  215.     uint32_t    lij_id;        /* LIJ call identifier */
  216.     } sas_addr __ATM_API_ALIGN;        /* SVC address */
  217. };
  218.  
  219.  
  220. static __inline__ int atmsvc_addr_in_use(struct sockaddr_atmsvc addr)
  221. {
  222.     return *addr.sas_addr.prv || *addr.sas_addr.pub;
  223. }
  224.  
  225.  
  226. static __inline__ int atmpvc_addr_in_use(struct sockaddr_atmpvc addr)
  227. {
  228.     return addr.sap_addr.itf || addr.sap_addr.vpi || addr.sap_addr.vci;
  229. }
  230.  
  231.  
  232. /*
  233.  * Some stuff for linux/sockios.h
  234.  */
  235.  
  236. struct atmif_sioc {
  237.     int number;
  238.     int length;
  239.     void __user *arg;
  240. };
  241.  
  242. typedef unsigned short atm_backend_t;
  243. #endif
  244.